package com.myk.game.gobangchess.ai.symmetric;

import java.util.Arrays;

/**
 * 这个主类是 Python GUI 和 Java AI 核心逻辑之间的桥梁。
 * 它从命令行接收棋盘状态和 AI 参数，调用 AiController.findBestMove，
 * 并将计算出的最佳移动以标准格式打印到控制台，以便 Python 脚本可以捕获和解析它。
 */
public class Main {

    public static void main(String[] args) {
        // 预期参数:
        // args[0]: 棋盘字符串，225个字符，代表15x15棋盘，'1' for black, 'm' for white (-1), '0' for empty
        // args[1]: AI 玩家颜色 ( "1" 或 "-1" )
        // args[2]: 搜索深度 (e.g., "2")
        // args[3]: 分支因子 (e.g., "10")
        // args[4..20]: 17个趋势打分系数

        if (args.length < 21) {
            // 调试信息打印到标准错误流
            System.err.println("错误: 参数不足。");
            System.err.println("用法: java Main <board_string> <player_color> <depth> <branching_factor> <17_coefficients>");
            return;
        }

        // 1. 解析棋盘字符串
        int[][] board = new int[15][15];
        String boardStr = args[0];
        if (boardStr.length() != 225) {
            System.err.println("错误: 棋盘字符串长度必须为 225。");
            return;
        }
        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 15; j++) {
                char p = boardStr.charAt(i * 15 + j);
                if (p == '1') {
                    board[i][j] = 1;
                } else if (p == 'm') { // 使用 'm' 代表 minus 1
                    board[i][j] = -1;
                } else {
                    board[i][j] = 0;
                }
            }
        }

        // 2. 解析其它参数
        int aiPlayerColor = Integer.parseInt(args[1]);
        int depth = Integer.parseInt(args[2]);
        int branchingFactor = Integer.parseInt(args[3]);
        
        double[] coefficients = new double[17];
        for (int i = 0; i < 17; i++) {
            coefficients[i] = Double.parseDouble(args[i + 4]);
        }

        // 3. 调用 AI 控制器
        AiController aiController = new AiController(); 
        int[] bestMove = aiController.findBestMove(board, aiPlayerColor, depth, branchingFactor, coefficients);

        // 4. 将结果打印到标准输出
        // *** 修正点: 确保只有这一行输出到标准输出流 ***
        // Python 将会捕获这个输出
        System.out.println(Arrays.toString(bestMove));
    }
}